package com.atguigu.lease;

import com.atguigu.lease.common.config.Knife4jConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

//启动类
//@SpringBootApplication
//springboot项目 组件类的排除
// 原因： common定义了一个knife4j的配置类 app不需要使用它  而且它和app项目的配置类重名 冲突了
//场景1：排除自动配置类(springboot自动配置加载的142个配置类 或者自定义场景启动器的配置类 可以使用启动类注解 exclude排除)
@SpringBootApplication//(exclude = {DataSourceAutoConfiguration.class})
//场景2：组件类排除(发生在IOC容器初始化时！)
//   使用这个注解时，可以自定义扫描组件的包、 要扫描的组件类、要排除的组件类
//     必须指定 扫描的包！！
@ComponentScan(basePackages = {"com.atguigu.lease"} ,
        //排除不需要的组件类的配置
        excludeFilters = {
            @ComponentScan.Filter(
                    //使用类的全类名排除
                    type = FilterType.ASSIGNABLE_TYPE,
            //指定要排除的组件类
            value = {com.atguigu.lease.common.config.Knife4jConfiguration.class})
        }
)
@EnableAsync //开启异步！！！
@EnableScheduling //开启定时任务！！！
public class WebAppApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebAppApplication.class, args);
    }
}
